package com.kx.yooli.kx.wechat.service;

import com.kx.yooli.kx.wechat.po.message.*;
import com.kx.yooli.kx.wechat.po.result.ApplyCheckResult;
import com.mybatisflex.core.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author john_sqwen-childe.wen
 * date 2024/4/8
 * PROJECT_NAME wechat
 * description create IWeChatValidateCodeService by john_sqwen
 * and  value is
 */
public interface IWeChatValidateCodeService extends IService<WechatValidateCode> {
    /**
     * 插入操作
     * @param wechatUserBinding 微信用户
     * @param wechatValidateCode 验证码
     * @param wechatSmsSequence 序列
     * @param wechatSmsLog 短信发送日志
     * @return true 插入成功  false 失败
     */
    public boolean insertWeChat(WechatValidateCode wechatValidateCode, WechatSmsSequence wechatSmsSequence, WechatSmsLog wechatSmsLog);
    /**
     * 微信用户（插入操作）
     * @param wechatUserBinding
     * @return true 或者false
     */
    public boolean insertWechatUserBinding(WechatUserBinding wechatUserBinding);
    /**
     * 种子用户绑定关系表（操作）
     * @param wechatDrainsInfo
     * @return
     */
    public boolean insertWechatDrainsInfo(WechatDrainsInfo wechatDrainsInfo);
    /**
     * 验证码（插入操作）
     * @param wechatValidateCode
     * @return true 或者false
     */
    public boolean insertWechatValidateCode(WechatValidateCode wechatValidateCode);
    /**
     * 插入操作
     * 序列(记录短信次数)
     * @param wechatSmsSequence
     * @return true 或者false
     */
    public boolean insertWechatSmsSequence(WechatSmsSequence wechatSmsSequence);
    /**
     * 插入操作
     * 短信发送日志
     * @param wechatSmsLog
     * @return
     */
    public boolean insertWechatSmsLog(WechatSmsLog wechatSmsLog);

    /**
     * 查询序列日志（根据条件适用于所有查询）
     * @param sequenceExample（查询条件）
     * @return list 短信序列集合
     */
    public List<WechatSmsSequence> getWechatSmsSequence(WechatSmsSequenceExample sequenceExample);

    /**
     * 查询验证码实体机会（适用于所有的带有条件的查询）
     * @param example 封装所有的查询条件
     * @return list 验证码实体集合
     */
    public List<WechatValidateCode> getWechatValidateCode(WechatValidateCodeExample example);

    /**
     * 更新wechatValidateCode（短信验证码表）（使用所有更新）
     * @param wechatValidateCode
     * @param example封装更新条件
     * @return  true或者false
     */
    public boolean updateWechatValidateCode(WechatValidateCode wechatValidateCode,WechatValidateCodeExample example);
    /**
     * 更新WechatUserBinding（微信用户表） 适用于所有的方法
     * @param wechatUserBinding
     * @param example 封装更新条件
     * @return true或者false
     */
    public boolean updateWechatUserBinding(WechatUserBinding wechatUserBinding,WechatUserBindingExample example);
    /**
     * 根据条件查询微信用户
     * @param phone 手机
     * @param idCard 身份证号码
     * @return 返回一个list 微信绑定用户实体集合
     */
    public List<WechatUserBinding>  selectWechatUserBindingByPhoneAndIdcard(String phone,String idCard);
    /**
     * 根据条件查询一条记录
     * @param phone
     * @param idCard
     */
    public List<WechatValidateCode>  selectWechatValidateCodeByPhoneAndIdcard(String phone,String idCard);
    /**
     * 根据条件查询一条记录（状态和电话）查询验证码表
     * @param phone 电话
     * @param status 状态
     * @return 返回一个list 验证码实体集合
     */
    public List<WechatValidateCode>  selectWechatValidateCodeByPhoneAndStatus(String phone,Integer status);
    /**
     * 查询验证码序列记录数
     *
     * @param phone 手机号码
     * @param date 日期（yyyy-mm-dd）
     * @return list 验证码序列集合
     */
    public List<WechatSmsSequence> selectCodeByPhone( String phone,String date);
    /**
     * 根据条件openid查询一条记录
     * @param openId
     *
     */
    public List<WechatUserBinding>  selectWechatUserBindingByopenId(String openId);

    /**
     * 根据条件openid查询一条记录
     * @param openId
     *
     */
    public List<WechatUserBinding> selectWechatUserBindingByopenIdAndStatus(String openId, Integer status);
    /**
     * 根据idCard去查询微信记录
     *
     * @param idCard
     * @return
     */
    public List<WechatUserBinding>  selectWechatUserBindingByidCard(String idCard);
    /**
     * 根据条件openid查询一条记录
     * @param openId
     *
     */
    public List<WechatDrainsInfo>  selectWechatDrainsInfoByopenId(String openId);
    /**
     * 根据条件openid查询关联信息表一条记录
     * @param openId
     *
     */
    public List<WechatDrainsInfo>  selectWechatDrainsInfoByOpenId(String openId);
    /**
     * 根据条件idCard查询是否是种子用户
     * @param idCard
     *
     */
    public List<WechatTorrentInfo>  selectWechatTorrentInfoByIdCard(String idCard);

    /**
     * 根据条件手机号查询是否是有记录
     * @param phone
     *
     */
    public List<WechatUserBinding>  selectWechatUserBindingByPhone(String phone);

    /**
     * 根据条件手机号查询是否是有记录
     * @param list
     *
     */
    public List<WechatUserBinding>  selectBindListByPhone(List<String> list);


    /**
     * 根据id 主键修改验证码表
     * @param id
     * @return >0 需改成功，<0 失败
     */
    public int updateWechatValidateCodeById(WechatValidateCode wechatValidateCode);
    /**
     * 根据id 主键修改微信用户验证表
     * @param id
     *@return >0 需改成功，<0 失败
     */
    public int updateWechatUserBindingById(WechatUserBinding wechatUserBinding);
    /**
     * 根据id 主键修改短信日志表
     * @param id
     *@return >0 需改成功，<0 失败
     */
    public int updateWechatSmsLogById(WechatSmsLog wechatSmsLog);
    /**
     * 根据id 主键修改短信序列表
     * @param id（主键）
     * @return >0 需改成功，<0 失败
     */
    public int updateWechatSmsSequenceById(WechatSmsSequence wechatSmsSequence);

    /**
     * 保存微信申请信息
     * @param wechatApplyInfo
     * @return
     */
    public boolean insertWechatApplyInfo(WechatApplyInfo wechatApplyInfo);
    /**
     * 保存身份证验证次数
     * @param wechatIccardValidateNum
     * @return
     */
    public boolean insertWechatIccardValidateNum(WechatIccardValidateNum wechatIccardValidateNum);
    /**
     * 根据条件查询WechatIccardValidateNum
     * @param wechatIccardValidateNum
     *
     */
    public List<WechatIccardValidateNum>  selectWechatIccardValidateNum(WechatIccardValidateNum wechatIccardValidateNum);
    /**
     * 根据id 主键修改短信序列表
     * @param id（主键）
     * @return >0 需改成功，<0 失败
     */
    public int updateWechatIccardValidateNumById(WechatIccardValidateNum wechatIccardValidateNum);

    /*
     * @Description 根据身份证号，电话号码获得客户进件资格类型跟授信额度
     * @param idCard,phone
     * @return
     * @throws Exception*/
    public ApplyCheckResult checkCustomerIdentity(String idCard, String phone) throws Exception;

    /*
     * @Description 根据身份证号，电话号码判断客户是否进行重复申请
     * @param idCard,phone
     * @return
     * @throws Exception*/
    public String checkReservation(String idCard, String phone) throws Exception;

    /*
     * @Description K易贷派单
     * @param params
     * @return
     * @throws Exception*/
    public ApplyCheckResult reservationPush(Map<String, String> params) throws Exception;

    /*
     * @Description 最新活动信息
     * @param params
     * @return
     * @throws Exception*/
    public WechatBannerUrl selectWechatBannerUrl(String idCard) throws Exception;
    public boolean checkReservationLemonTdBlackList(Map<String, String> params) throws Exception;

}
